/**
 * Copyright (c) 2016-2019 人人开源 All rights reserved.
 *
 * https://www.renren.io
 *
 * 版权所有，侵权必究！
 */
package io.renren.common.utils

import com.alibaba.druid.util.StringUtils
import org.slf4j.LoggerFactory
import javax.servlet.http.HttpServletRequest

/**
 * IP地址
 *
 * @author Mark sunlightcs@gmail.com
 */
object IPUtils {
    private val logger = LoggerFactory.getLogger(IPUtils::class.java)

    /**
     * 获取IP地址
     *
     * 使用Nginx等反向代理软件， 则不能通过request.getRemoteAddr()获取IP地址
     * 如果使用了多级反向代理的话，X-Forwarded-For的值并不止一个，而是一串IP地址，X-Forwarded-For中第一个非unknown的有效IP字符串，则为真实IP地址
     */
    fun getIpAddr(request: HttpServletRequest?): String? {
        var ip: String? = null
        try {
            ip = request!!.getHeader("x-forwarded-for")
            if (StringUtils.isEmpty(ip) || "unknown".equals(ip, ignoreCase = true)) {
                ip = request.getHeader("Proxy-Client-IP")
            }
            if (StringUtils.isEmpty(ip) || ip.length == 0 || "unknown".equals(ip, ignoreCase = true)) {
                ip = request.getHeader("WL-Proxy-Client-IP")
            }
            if (StringUtils.isEmpty(ip) || "unknown".equals(ip, ignoreCase = true)) {
                ip = request.getHeader("HTTP_CLIENT_IP")
            }
            if (StringUtils.isEmpty(ip) || "unknown".equals(ip, ignoreCase = true)) {
                ip = request.getHeader("HTTP_X_FORWARDED_FOR")
            }
            if (StringUtils.isEmpty(ip) || "unknown".equals(ip, ignoreCase = true)) {
                ip = request.remoteAddr
            }
        } catch (e: Exception) {
            logger.error("IPUtils ERROR ", e)
        }

//        //使用代理，则获取第一个IP地址
//        if(StringUtils.isEmpty(ip) && ip.length() > 15) {
//			if(ip.indexOf(",") > 0) {
//				ip = ip.substring(0, ip.indexOf(","));
//			}
//		}
        return ip
    }
}